home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / et / src / change.c < prev    next >
C/C++ Source or Header  |  1993-07-08  |  9KB  |  357 lines

  1. #include  "et.h"
  2. void  change(int menu_i)/*et*/
  3. {
  4.   int   cut, key_i;
  5.   
  6.   if (!test_bit(G_f, f_WW) || !test_bit(G_f, f_RR))
  7.     disp_menu(menu_i, P_v[v_VIEW_0], 5, 0);
  8.   switch(menu_i) {
  9.   case mn_AT:
  10.     set_bit(G_f, f_AT);
  11.     break;
  12.   case mn_WW:
  13.     break;
  14.   default:
  15.     set_bit(G_f, f_PPGG);
  16.     copy_buffer(1, STORE, NULL, 0);
  17.     break;
  18.   }
  19.   cut = key_i = 0;
  20.   while (1) {
  21.     cut = set_pm(&menu_i, cut, &key_i);
  22.     if (test_bit(G_f, f_WW) && test_bit(G_f, f_RR))
  23.       return;
  24.     if (!cut)
  25.       break;
  26.     draw_edge(P_RES, AFT);
  27.     cut = go_bar(&key_i, 4, 0);
  28.     draw_edge(P_SET, AFT);
  29.     if (!cut)
  30.       break;
  31.   }
  32.   res_bit(G_f, f_PPGG|f_AT);
  33.   disp_menu(menu_i, P_v[v_VIEW_0], 6, 0);
  34. }
  35. int   set_pm(int *menu_i_p, int cut, int *key_i_p)/*et*/
  36. {
  37.   int   v_1, v_2, v_3;
  38.   int   i, j, menu_i, menu_b, v, v_b, p_i, df, step, key, key_n;
  39.   static int pq_a[4]; /* ← static !! */
  40.   
  41.   G_pn.wink = pq_a;
  42.   menu_i = *menu_i_p;
  43.   if (!test_bit(G_f, f_WW|f_AT))
  44.     set_v12(&v_1, &v_2);
  45.   set_var_pq(menu_i, pq_a);
  46.   p_i = pq_a[0]+4;
  47.   paint_window(pq_a, H_GRN, P_NEG);
  48.   v = G_pm.a[menu_i-mn_AT];
  49.   menu_b = menu_i;
  50.   v_b = v;
  51.   df = 0;
  52.   do {
  53.     key = inkey(WINK);
  54.     if (isdigit(key))
  55.       sub_set_pm(&key, &v, pq_a, menu_i);
  56.     if (key == _RT || key == _LT)
  57.       step = set_step((int)v, key);
  58.     switch(key) {
  59.     case _ESC:
  60.       paint_window(pq_a, H_GRN, P_NEG);
  61.       v = G_pm.a[menu_i-mn_AT];
  62.       break;
  63.     case S_RET:
  64.       if (!nb_key(G_mv))
  65.         key = _RET;
  66.     case _RET:
  67.       if (v != v_b)
  68.         v_b = v;
  69.       else if (cut)
  70.         df = 1;
  71.       if (!v)
  72.         v = 1;
  73.       G_pm.a[menu_i-mn_AT] = v;
  74.       set_v123(&v_1, &v_2, &v_3, menu_i);
  75.       for (i = 2; i; i--) {
  76.         draw_pm(menu_i, H_WHT);
  77.         paint_window(pq_a, H_GRN, P_NEG);
  78.         exchange_page();
  79.       }
  80.       if (test_bit(G_f, f_WW) && test_bit(G_f, f_RR)) {
  81.         key_n = nb_key(G_mv);
  82.         G_mv[key_n].r = G_pm.i.r;
  83.         i = (key_n) ? 7 : 0;
  84.         *key_i_p = 0;
  85.       } else {
  86.         switch(key) {
  87.         case _RET:
  88.           if (!df) {
  89.             i = 0;
  90.             *key_i_p = 0;
  91.           } else
  92.             i = 2;
  93.           break;
  94.         case S_RET:
  95.           if (!df) {
  96.             i = 3;
  97.             *key_i_p = 0;
  98.           } else
  99.             i = 4;
  100.           break;
  101.         }
  102.       }
  103.       if (i == 3 || i == 4)
  104.         draw_edge(P_RES, AFT);
  105.       cut = go_bar(key_i_p, i, 0);
  106.       df = 0;
  107.       if (test_bit(G_f, f_WW) && test_bit(G_f, f_RR)) {
  108.         if (!i)
  109.             draw_edge(P_SET, AFT);
  110.         copy_window(P_i[i_WIN_FRAME], P_v[v_VRAM], 0x14, PEEK);
  111.         exchange_page();
  112.         copy_window(P_i[i_WIN_FRAME], P_v[v_VRAM], 0x14, POKE);
  113.         exchange_page();
  114.       } else
  115.         draw_edge(P_SET, AFT);
  116.       paint_window(pq_a, H_GRN, P_NEG);
  117.       if (set_pm2(pq_a, &menu_b, &v_b, &v, menu_i))
  118.         continue;
  119.       break;
  120.     case _RT:
  121.       i = v + step;
  122.       if (i <= 30000)
  123.         v = i;
  124.       break;
  125.     case _LT:
  126.       i = v - step;
  127.       if (i > 0)
  128.         v = i;
  129.       break;
  130.     case S_BS:
  131.       copy_buffer(1, RESTORE, NULL, 0);
  132.       for (i = 2; i; i--, exchange_page()) {
  133.         if (i == 1) {
  134.           copy_window(P_i[i_WIN_VRAM], P_v[v_VRAM], 0x14, POKE);
  135.           continue;
  136.         }
  137.         cls_view(P_i[i_WIN_VIEW]);
  138.         copy_window(P_i[i_WIN_VIEW], P_v[v_VIEW_0], 0x120, POKE);
  139.         set_trace_mode(test_bit(G_f, f_AA|f_NN));
  140.         cul_draw_edge(i);
  141.         draw_pm(menu_i, H_WHT);
  142.         copy_window(P_i[i_WIN_VRAM], P_v[v_VRAM], 0x14, PEEK);
  143.       }
  144.       df = 0;
  145.       cut = 0;
  146.       v = G_pm.a[menu_i-mn_AT];
  147.       break;
  148.     default:
  149.       if (test_bit(G_f, f_WW|f_AT))
  150.         continue;
  151.       switch(key) {
  152.       case _UP:
  153.         if (menu_i > mn_PP)
  154.           menu_i--;
  155.         break;
  156.       case _DN:
  157.         if (menu_i < mn_GG)
  158.           menu_i++;
  159.         break;
  160.       default:
  161.         j = (find_key(key))->n;
  162.         if (j < mn_PP || j > mn_GG)
  163.           continue;
  164.         menu_i = j;
  165.         break;
  166.       }
  167.       if (set_pm2(pq_a, &menu_b, &v_b, &v, menu_i))
  168.         continue;
  169.       break;
  170.     }
  171.     for (i = 2; i; i--, exchange_page()) {
  172.       draw_v((int)v, p_i, G_mn[menu_i].q, H_WHT, 5);
  173.       paint_window(pq_a, H_GRN, P_NEG);
  174.     }
  175.     paint_window(pq_a, H_GRN, P_NEG);
  176.   } while (key != _ESC);
  177.   paint_window(pq_a, H_GRN, P_NEG);
  178.   *menu_i_p = menu_i;
  179.   return(cut);
  180. }
  181. int   set_pm2(int *pq_p, int *menu_b_p, int *v_b_p, int *v_p, int menu_i)/*et*/
  182. {     
  183.   int   i, j, v, v_b, menu_b, p_i;
  184.     
  185.   if (menu_i > mn_GG)
  186.     return;
  187.   menu_b = *menu_b_p;
  188.   v_b = *v_b_p;
  189.   v = *v_p;
  190.   switch(menu_i) {
  191.   case mn_PP:
  192.   case mn_DD:
  193.   case mn_XX:
  194.   case mn_YY:
  195.   case mn_ZZ:
  196.   case mn_GG:
  197.     j = menu_i == menu_b;
  198.     if (!j) {
  199.       G_nb.mn = menu_i;
  200.       v = G_pm.a[menu_i-mn_AT];
  201.       set_var_pq(menu_i, pq_p);
  202.       p_i = pq_p[0]+4;
  203.       for (i = 2; i; i--, exchange_page()) {
  204.         if (i == 1) {
  205.           copy_window(P_i[i_WIN_VRAM], P_v[v_VRAM], 0x14, POKE);
  206.           continue;
  207.         }
  208.         draw_v((int)v_b, p_i, G_mn[menu_b].q, H_WHT, 5);
  209.         draw_v((int)v, p_i, G_mn[menu_i].q, H_WHT, 5);
  210.         mark_key(2, menu_b);
  211.         draw_mode(1, menu_b, H_RED);
  212.         draw_mode(0, menu_b, L_WHT);
  213.         draw_mode(0, menu_i, L_WHT);
  214.         draw_mode(1, menu_i, H_RED);
  215.         paint_window(pq_p, H_GRN, P_NEG);
  216.         copy_window(P_i[i_WIN_VRAM], P_v[v_VRAM], 0x14, PEEK);
  217.       }
  218.       paint_window(pq_p, H_GRN, P_NEG);
  219.       menu_b = menu_i;
  220.       v_b = v;
  221.       j = 1;
  222.     }
  223.     break;
  224.   default:
  225.     j = 1;
  226.     break;
  227.   }
  228.   *menu_b_p = menu_b;
  229.   *v_b_p = v_b;
  230.   *v_p = v;
  231.   return(j);
  232. }
  233. int   inp_v(int *v_p, int key, int n)/*et*/
  234. {
  235.   int   i, k, h, col;
  236.   int   pq_a[4], p_i;
  237.   int   v, v_i;
  238.  
  239.   if (test_bit(G_f, f_AT)) {
  240.     n = mn_AT;
  241.     h = 4;
  242.     col = H_WHT;
  243.   } else if (test_bit(G_f, f_WW)) {
  244.     n = mn_WW;
  245.     h = 4;
  246.     col = H_WHT;
  247.   } else {
  248.     n = G_nb.mn;
  249.     if (test_bit(G_f, f_FF)) {
  250.       v_i = 0;
  251.       h = 3;
  252.       col = H_GRN;
  253.     } else {
  254.       h = 4;
  255.       col = H_WHT;
  256.     }
  257.   }
  258.   set_var_pq(n, pq_a);
  259.   p_i = pq_a[0]+4;
  260.   pq_a[0] = p_i + 8;
  261.   pq_a[2] = pq_a[0]+7;
  262.   access_page();
  263.   paint_window(pq_a, col, P_NEG);
  264.   access_page();
  265.   i = v = 0;
  266.   do {
  267.     if (!test_bit(G_f, f_FF) && isdigit(key)) {
  268.       v = v * 10 + key-_00;
  269.       for (k = 2; k; k--, exchange_page())
  270.         draw_v((int)key-_00, p_i, G_mn[n].q, H_GRN, 1);
  271.       p_i += 8;
  272.     } else if (isdigit(key) || (key >= _AA && key <= _FF)) {
  273.       if (isdigit(key))
  274.         v = v * 16 + key-_00;
  275.       else
  276.         v = v * 16 + key-_AA+10;
  277.       for (k = 2; k; k--, exchange_page())
  278.         if (isdigit(key))
  279.           draw_v((int)key-_00, p_i, G_mn[n].q, H_GRN, 1);
  280.         else
  281.           draw_v((int)key-_AA+10, p_i, G_mn[n].q, H_GRN, 1);
  282.       p_i += 8;
  283.       v_i++;
  284.       if (v_i >= 4)
  285.         key = _RET;
  286.     }
  287.     if (key != _RET)
  288.       key = inkey(WINK);
  289.     if (key == _BS) {
  290.       key = 0;
  291.       if (v_i)
  292.         v_i--;
  293.       if (!v)
  294.         continue;
  295.       i--;
  296.       v /= ((h == 4) ? 10L : 16L);
  297.       access_page();
  298.       paint_window(pq_a, col, P_NEG);
  299.       access_page();
  300.       p_i -= 8;
  301.       pq_a[0] = p_i;
  302.       pq_a[2] = pq_a[0]+7;
  303.       for (k = 2; k; k--, exchange_page())
  304.         paint_window(pq_a, col, P_RES);
  305.       access_page();
  306.       paint_window(pq_a, col, P_NEG);
  307.       access_page();
  308.     } else if (isdigit(key) || (key >= _AA && key <= _FF)) {
  309.       if (i == h) {
  310.         key = 0;
  311.         continue;
  312.       }
  313.       access_page();
  314.       paint_window(pq_a, col, P_NEG);
  315.       if (i <= h-1) {
  316.         pq_a[0] = p_i+8;
  317.         pq_a[2] = pq_a[0]+7;
  318.         i++;
  319.         paint_window(pq_a, col, P_NEG);
  320.       }
  321.       access_page();
  322.     }
  323.   } while (!key || isdigit(key) || (key >= _AA && key <= _FF));
  324.   if (test_bit(G_f, f_FF)) {
  325.     if (v < 0x2122)
  326.       v = 0x2122;
  327.     else if (v > 0x737e)
  328.       v = 0x737e;
  329.   } else if (v > 30000)
  330.     v = 30000;
  331.   *v_p = (int)v;
  332.   return(key);
  333. }
  334. void  sub_set_pm(int *key_p, int *v_p, int pq_a[], int menu_i)/*et*/
  335. {
  336.   int   i, p_i;
  337.   
  338.   p_i = pq_a[0]+4;
  339.   for (i = 2; i; i--, exchange_page())
  340.     paint_window(pq_a, H_WHT, P_RES);
  341.   *key_p = inp_v(v_p, *key_p, menu_i);
  342.   if (*key_p != _RET && *key_p != S_RET && *key_p != C_MM) {
  343.     *v_p = G_pm.a[menu_i-mn_AT];
  344.     for (i = 2; i; i--, exchange_page()) {
  345.       paint_window(pq_a, H_WHT, P_RES);
  346.       draw_v((int)*v_p, p_i, G_mn[menu_i].q, H_WHT, 5);
  347.       paint_window(pq_a, H_GRN, P_NEG);
  348.     }
  349.     paint_window(pq_a, H_GRN, P_NEG);
  350.   }
  351. }
  352. void  set_v12(int *v1_p, int *v2_p)/*et*/
  353. {   
  354.   *v1_p = G_pm.i.dist * GETA_ET / G_pm.i.pers;
  355.   *v2_p = G_pm.i.z_step * GETA_ET / G_pm.i.dist;
  356. }
  357.